home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib18.dsk / SCREEN EDIT 80.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  184 lines

  1. 10  REM   **********************
  2. 20  REM   *   SCREEN EDIT 80   *
  3. 30  REM   *   BY RUDY A. GUY   *
  4. 40  REM   * COPYRIGHT (C) 1984 *
  5. 50  REM   * BY MICROSPARC, INC *
  6. 60  REM   * LINCOLN, MA. 01773 *
  7. 70  REM   **********************
  8. 80  ONERR  GOTO 1670
  9. 90  IF  PEEK(64435) < >6  THEN 1840: REM   MAKE SURE A //E IS BEING USED."
  10. 100  HIMEM: 36095
  11. 110  DIM VL(23),M$(21)
  12. 120  PRINT  CHR$(4)"PR#3": REM   ACTIVATE 80 COLUMN CARD.
  13. 130  TEXT : HOME : FOR I = 0 TO 23: READ VL(I): NEXT 
  14. 140  TEXT : PRINT  CHR$(12)
  15. 150  GOSUB 1130
  16. 160  REM   MAIN INPUT ROUTINE
  17. 170  GET A$: IF  ASC(A$) = 47  THEN  GOSUB 1090: GOTO 170
  18. 180  PRINT A$;
  19. 190  IF  ASC(A$) = 3  THEN  GOSUB 310
  20. 200  IF  ASC(A$) = 4  THEN  GOSUB 520
  21. 210  IF  ASC(A$) = 5  THEN  PRINT  CHR$(12) CHR$(21): END 
  22. 220  IF  ASC(A$) = 6  THEN  GOSUB 980
  23. 230  IF  ASC(A$) = 9  THEN  GOSUB 650
  24. 240  IF  ASC(A$) = 16  THEN  GOSUB 460
  25. 250  IF  ASC(A$) = 18  THEN  GOSUB 400
  26. 260  IF  ASC(A$) = 19  THEN  GOSUB 850
  27. 270  IF  ASC(A$) = 47  THEN  GOSUB 1090
  28. 280  IF  ASC(A$) = 127  THEN  GOSUB 750
  29. 290  IF  PEEK(37) >21  THEN  VTAB 1
  30. 300  GOTO 170
  31. 310  REM   CENTER JUSTIFY (CTRL-C)
  32. 320 V =  PEEK(37):M$ = "": REM   NO SPACE BETWEEN QUOTES
  33. 330  GOSUB 830
  34. 340  FOR I = 80 TO 1  STEP  -1: IF  MID$ (M$,I,1) < > CHR$(160)  AND  MID$ (M$,I,1) < > CHR$(32)  THEN 360
  35. 350  NEXT : RETURN 
  36. 360 M$ =  LEFT$(M$,I)
  37. 370  PRINT  CHR$(26): VTAB V +1
  38. 380 HT = 40 - LEN(M$)/2: POKE 1403,HT: PRINT M$
  39. 390  RETURN 
  40. 400  REM    RIGHT JUSTIFY (CTRL-R)
  41. 410 V =  PEEK(37):M$ = "": GOSUB 830: REM   NO SPACE BETWEEN QUOTES.
  42. 420  FOR I = 80 TO 1  STEP  -1: IF  MID$ (M$,I,1) < > CHR$(160)  AND  MID$ (M$,I,1) < > CHR$(32)  THEN 440
  43. 430  NEXT : RETURN : REM   LINE ALREADY RIGHT JUSTIFIED.
  44. 440 M$ =  LEFT$(M$,I): PRINT  CHR$(26): VTAB V +1
  45. 450 HT = 80 - LEN(M$): POKE 1403,HT: PRINT M$;: RETURN 
  46. 460  REM  LEFT JUSTIFY (CTRL-P)
  47. 470 V =  PEEK(37):M$ = "": GOSUB 830: REM   NO SPACE BETWEEN QUOTES.
  48. 480  FOR I = 1 TO 80: IF  MID$ (M$,I,1) < > CHR$(160)  AND  MID$ (M$,I,1) < > CHR$(32)  THEN 500
  49. 490  NEXT : RETURN : REM   LINE ALREADY LEFT JUSTIFIED.
  50. 500 M$ =  RIGHT$(M$,80 -(I -1)): PRINT  CHR$(26): VTAB V +1
  51. 510  PRINT M$: RETURN 
  52. 520  REM  DUMP TO PRINTER (CTRL-D)
  53. 530  POKE 34,22: HOME 
  54. 540  GOSUB 1500
  55. 550  REM  MEMORY HAS BEEN MOVED. SCREEN IS READ INTO M$ AND ORIENTED.
  56. 560  PRINT "Printing will begin in approximately 20 seconds."
  57. 570  FOR V = 0 TO 21:M$ = "": GOSUB 830:M$(V) = M$: NEXT : REM  NO SPACE BETWEEN QUOTES.
  58. 580  PRINT  CHR$(12); CHR$(21): PRINT  CHR$(4)"PR#1": PRINT  CHR$(9)"80N"
  59. 590  FOR I = 0 TO 21: PRINT M$(I);: NEXT : PRINT 
  60. 600  PRINT  CHR$(4)"PR#0"
  61. 610  PRINT  CHR$(4)"PR#3": PRINT : REM  REACTIVATE 80 COLUMN CARD. THE PRINT IS REQUIRED.
  62. 620  GOSUB 1620
  63. 630  VTAB 1
  64. 640  RETURN 
  65. 650  REM    INSERT (CTRL-I)
  66. 660 M$ = "": REM    NO SPACE BETWEEN QUOTES.
  67. 670 HT =  PEEK(1403):V =  PEEK(37): GOSUB 830
  68. 680  IF HT = 79  THEN  RETURN 
  69. 690  IF HT = 0  THEN M1$ = "": GOTO 710: REM   NO SPACE BETWEEN QUOTES.
  70. 700 M1$ =  LEFT$(M$,HT)
  71. 710  IF  RIGHT$(M$,1) < > CHR$(160)  AND  RIGHT$(M$,1) < > CHR$(32)  THEN  RETURN 
  72. 720 M2$ =  CHR$(160) + MID$ (M$,HT +1,(79 -HT))
  73. 730  PRINT  CHR$(26): VTAB V +1: PRINT M1$;M2$;: VTAB V +1: HTAB HT +1
  74. 740  RETURN 
  75. 750  REM  DELETE (DELETE KEY)
  76. 760 M$ = "":HT =  PEEK(1403):V =  PEEK(37): GOSUB 830
  77. 770  IF HT = 0  THEN  VTAB V: POKE 1403,79: PRINT " ";: VTAB V: POKE 1403,79: RETURN 
  78. 780  IF HT = 1  THEN M1$ = "":M2$ =  RIGHT$(M$,79): GOTO 810: REM   NO SPACE BETWEEN QUOTES.
  79. 790 M1$ =  LEFT$(M$,HT -1)
  80. 800 M2$ =  MID$ (M$,HT +1,(79 -HT))
  81. 810  PRINT  CHR$(26): VTAB V +1: PRINT M1$;M2$;: VTAB V +1: POKE 1403,HT -1
  82. 820  RETURN 
  83. 830  REM   READ 80 COLUMN SCREEN INTO M$
  84. 840  FOR I = VL(V) TO VL(V) +39: POKE  -16299,0:M$ = M$ + CHR$( PEEK(I)): POKE  -16300,0:M$ = M$ + CHR$( PEEK(I)): NEXT : RETURN 
  85. 850  REM   SAVE 80 COLUMN SCREEN
  86. 860 V =  PEEK(37):H =  PEEK(1403)
  87. 870  PRINT  CHR$(14)
  88. 880  POKE 34,22: HOME : INPUT "Screen name:";NA$: IF NA$ = ""  THEN  HOME : POKE 34,0: VTAB V +1: POKE 1403,H: RETURN 
  89. 890  HOME 
  90. 900  PRINT  CHR$(4)"RENAME "NA$".M,"NA$".M": INPUT "THAT FILE ALREADY EXISTS. DO YOU WANT IT REPLACED?";YN$: IF  LEFT$(YN$,1) = "N"  THEN  POKE 34,0: VTAB V +1: POKE 1403,H: RETURN 
  91. 910  HOME 
  92. 920  PRINT  CHR$(4)"BSAVE "NA$".M,A$400,L$3FF"
  93. 930  POKE  -16299,0
  94. 940  PRINT  CHR$(4)"BSAVE "NA$".A,A$400,L$3FF"
  95. 950  POKE  -16300,0
  96. 960  POKE 34,0
  97. 970  RETURN 
  98. 980  REM   LOAD 80 COLUMN SCREEN
  99. 990  HOME 
  100. 1000  VTAB 23: PRINT "Screen name to load:": PRINT "DIR for directory";: VTAB 23: HTAB 21: INPUT "";NA$
  101. 1010  IF NA$ = ""  THEN  HOME : RETURN 
  102. 1020  IF NA$ = "DIR"  OR NA$ = "dir"  THEN  HOME : PRINT  CHR$(4)"CATALOG": GOTO 1000
  103. 1030  HOME : POKE  -16300,0
  104. 1040  PRINT  CHR$(4)"BLOAD "NA$".M"
  105. 1050  POKE  -16299,0
  106. 1060  PRINT  CHR$(4)"BLOAD "NA$".A"
  107. 1070  POKE  -16300,0
  108. 1080  RETURN 
  109. 1090  REM    HELP (CTRL-/)
  110. 1100 FL = 1:V =  PEEK(37)
  111. 1110  GOSUB 1500
  112. 1120  HOME 
  113. 1130  REM  : HEADER PAGE AND DIRECTIONS
  114. 1140  PRINT : VTAB 1
  115. 1150 A$ = "SCREEN EDIT - 80": GOSUB 1660:A$ = "By Rudy A. Guy": GOSUB 1660
  116. 1160 A$ = "Copyright (c) 1984 MicroSPARC, Inc.": GOSUB 1660
  117. 1170  PRINT "Control-C  - Center Justify line at cursor"
  118. 1180  PRINT "Control-D  - Dump page to printer"
  119. 1190  PRINT "Control-E  - Exit program"
  120. 1200  PRINT "Control-F  - Load a file from disk"
  121. 1210  PRINT "Control-H  - Move cursor one space to the left"
  122. 1220  PRINT "Control-I  - Insert character at cursor"
  123. 1230  PRINT "Control-J  - Move cursor down to next line"
  124. 1240  PRINT "Control-K  - Clears from cursor to end of screen"
  125. 1250  PRINT "Control-L  - Clears screen and homes cursor"
  126. 1260  PRINT "Control-M  - Moves cursor to left end of next line"
  127. 1270  PRINT "Control-N  - Display set to NORMAL"
  128. 1280  PRINT "Control-O  - Display set to INVERSE"
  129. 1290  PRINT "Control-P  - Left justify line at cursor"
  130. 1300  PRINT "Control-R  - Right justify line at cursor"
  131. 1310  PRINT "Control-S  - Save screen to disk"
  132. 1320  PRINT "Control-V  - Scrolls screen down one line"
  133. 1330  PRINT "Control-W  - Scrolls screen up one line"
  134. 1340  PRINT "Control-Y  - Home cursor (Screen is not cleared)"
  135. 1350  PRINT "Control-Z  - Clears line at cursor"
  136. 1360  PRINT "Control-]  - Clears line from cursor to end of line"
  137. 1370  PRINT "DELETE     - Deletes character at cursor";
  138. 1380  POKE 32,58: POKE 33,22: POKE 34,3: HOME 
  139. 1390  PRINT "ESC functions:"
  140. 1400  PRINT : PRINT "I - Cursor up"
  141. 1410  PRINT "J - Cursor left"
  142. 1420  PRINT "K - Cursor right"
  143. 1430  PRINT "M - Cursor down"
  144. 1440  PRINT : PRINT "Arrow keys move cursorthe direction on the  key while in the ESC  mode."
  145. 1450  PRINT : INVERSE : PRINT "CTRL-/ for Help": NORMAL : PRINT 
  146. 1460  PRINT : PRINT "DO NOT USE THE": PRINT "ESC - 4 OR ESC - 8": PRINT "SEQUENCE.": PRINT 
  147. 1470  IF FL  THEN FL = 0: GOTO 1490
  148. 1480  PRINT : PRINT "Press a key to begin.";: GET A$: PRINT A$: TEXT : HOME : RETURN 
  149. 1490  PRINT "Press a key to resume.";: GET A$: PRINT A$: TEXT : HOME : GOSUB 1620: VTAB V +1: RETURN 
  150. 1500  REM   MEMORY MOVE ROUTINE
  151. 1510  REM   LOC. 60 & 61 - BEGINNING OF MEMORY TO MOVE.
  152. 1520  REM   LOC. 62 & 63 - END OF MEMORY BEING MOVED.
  153. 1530  REM   LOC. 66 & 67 - DESTINATION OF MEMORY MOVE.
  154. 1540  REM   LOC. 58 & 59 - SET JUMP TO MEMORY MOVE IN MONITOR.
  155. 1550  REM   LOC. 71 - STORES 0 IN Y REGISTER.
  156. 1560  REM   CALL -327 - STORES REGISTERS AND DOES JUMP TO MEMORY MOVE AT $FE2C
  157. 1570  REM   MOVE SCREEN TO $8D00.
  158. 1580  POKE 60,0: POKE 61,4: POKE 62,255: POKE 63,7: POKE 66,0: POKE 67,141: POKE 58,44: POKE 59,254: POKE 71,0: CALL  -327
  159. 1590  POKE  -16299,0: POKE 60,0: POKE 61,4: POKE 62,255: POKE 63,7: POKE 66,0: POKE 67,145: POKE 58,44: POKE 59,254: POKE 71,0: CALL  -327
  160. 1600  POKE  -16300,0
  161. 1610  RETURN 
  162. 1620  REM   MOVE TEXT PAGES BACK TO NORMAL SCREEN MEMORY LOCATION. $8D00 TO $400.
  163. 1630  POKE 60,0: POKE 61,141: POKE 62,255: POKE 63,144: POKE 66,0: POKE 67,4: POKE 58,44: POKE 59,254: POKE 71,0: CALL  -327: POKE  -16299,0
  164. 1640  POKE 60,0: POKE 61,145: POKE 62,255: POKE 63,148: POKE 66,0: POKE 67,4: POKE 58,44: POKE 59,254: POKE 71,0: CALL  -327: POKE  -16300,0
  165. 1650  RETURN 
  166. 1660 HT = 40 - LEN(A$)/2: POKE 1403,HT: PRINT A$: RETURN 
  167. 1670  REM  ERROR ROUTINE
  168. 1680 ER =  PEEK(222): REM  TYPE OF ERROR
  169. 1690 EL =  PEEK(218) + PEEK(219) *256: REM  ERROR LINE
  170. 1700  VTAB 23
  171. 1710  IF ER = 6  AND EL = 900  THEN 920
  172. 1720  IF ER = 22  THEN 170
  173. 1730  IF ER = 4  THEN  PRINT "DISK IS WRITE PROTECTED.": GOTO 1810
  174. 1740  IF ER = 6  THEN  PRINT "FILE NOT FOUND": GOTO 1810
  175. 1750  IF ER = 8  THEN  PRINT "DISK I/O ERROR": GOTO 1810
  176. 1760  IF ER = 9  THEN  PRINT "DISK IS FULL": GOTO 1810
  177. 1770  IF ER = 10  THEN  PRINT "FILE LOCKED": GOTO 1810
  178. 1780  IF ER = 11  THEN  PRINT "DISK SYNTAX ERROR": GOTO 1810
  179. 1790  IF ER = 15  THEN  PRINT "FILE TYPE ERROR": GOTO 1810
  180. 1800  PRINT "Error #"ER" has occurred in line "EL: END 
  181. 1810  FOR I = 1 TO 3000: NEXT : HOME : POKE 34,0: VTAB 1: HTAB 1: GOTO 170
  182. 1820  REM  SCREEN MEMORY LOCATIONS FOR READING DIRECTLY FROM THE SCREEN.
  183. 1830  DATA  1024,1152,1280,1408,1536,1664,1792,1920,1064,1192,1320,1448,1576,1704,1832,1960,1104,1232,1360,1488,1616,1744,1872,2000
  184. 1840  TEXT : HOME : VTAB 12: PRINT "SORRY, THIS PROGRAM WILL ONLY WORK ON   AN APPLE ][E."